From: Marco Trevisan (TreviƱo) Date: Mon, 11 Mar 2019 21:09:08 +0000 (-0400) Subject: magnifier: Track cursor sprite changes only when active X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~871^2^2~8 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=9158f55360d6af87c078d3af3db81f296f3b36b3;p=gnome-shell.git magnifier: Track cursor sprite changes only when active There's no point in keeping the cursor sprite texture around all the time, and to listen for its changes, we just need this when the magnifier is active. So, initialize the magnifier texture and monitor for the sprite changes on activation, while disconnect from the signal and nullify the texture when the magnifier is deactivated. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/443 --- diff --git a/js/ui/magnifier.js b/js/ui/magnifier.js index f6b0e9550..b01e8b6b2 100644 --- a/js/ui/magnifier.js +++ b/js/ui/magnifier.js @@ -88,7 +88,7 @@ var MouseSpriteContent = GObject.registerClass({ this._texture = coglTexture; this.invalidate(); - if (!oldTexture || + if (!oldTexture || !coglTexture || oldTexture.get_width() != coglTexture.get_width() || oldTexture.get_height() != coglTexture.get_height()) this.invalidate_size(); @@ -106,7 +106,6 @@ var Magnifier = class Magnifier { this._mouseSprite = new Clutter.Actor({ request_mode: Clutter.RequestMode.CONTENT_SIZE }); this._mouseSprite.content = new MouseSpriteContent(); - this._updateSpriteTexture(); this._cursorRoot = new Clutter.Actor(); this._cursorRoot.add_actor(this._mouseSprite); @@ -122,8 +121,6 @@ var Magnifier = class Magnifier { let showAtLaunch = this._settingsInit(aZoomRegion); aZoomRegion.scrollContentsTo(this.xMouse, this.yMouse); - cursorTracker.connect('cursor-changed', this._updateMouseSprite.bind(this)); - // Export to dbus. magDBusService = new MagnifierDBus.ShellMagnifier(); this.setActive(showAtLaunch); @@ -159,9 +156,15 @@ var Magnifier = class Magnifier { if (isActive != activate) { if (activate) { + this._updateMouseSprite(); + this._cursorSpriteChangedId = + this._cursorTracker.connect('cursor-changed', + this._updateMouseSprite.bind(this)); Meta.disable_unredirect_for_display(global.display); this.startTrackingMouse(); } else { + this._cursorTracker.disconnect(this._cursorSpriteChangedId); + this._mouseSprite.content.texture = null; Meta.enable_unredirect_for_display(global.display); this.stopTrackingMouse(); }